package com.cskaoyan.javase.array.operation6.max2;

/**
 * @description: 获取数组中最值
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 求数组中最值
 *
 * 在数组中假设某个元素是最值，然后逐一比较，不是最值的走，是最值的留下
 * 假设第一个元素是最值
 *
 *
 */
public class Demo {
    public static void main(String[] args) {

        int[] arr = {99999999, 2, 0, 45, 345, 21231, 252, 2324234, 4534, 123123};
        System.out.println("数组中最大值是：" + getArrayMaxValue(arr));
        //getArrayMaxValue(null);
        System.out.println("数组中最小值是："+getArrayMinValue(arr));

        //传入一个长度为0的数组
        //这里会报一个数组下标越界异常
        int[] arr1 = {};
        System.out.println(getArrayMaxValue(arr1));

    }

    public static int getArrayMaxValue(int[] arr) {
        //改进思路：判断null
        if (arr == null){
            //return 1;
            return 0;
        }
        //改进思路2：已经假设最大值是第一个元素了，遍历应该从第二个元素开始
        //改进思路3：判断是否为长度为0的数组
        //1，假设第一个元素是最大值
        int max = arr[0];
        //2，逐一比较，遍历这个数组
        for (int i = 1; i < arr.length; i++) {
            //判断这个元素和第一个元素的值
            if (arr[i] > max) {
                //你比我大，你留下
                //把这个元素作为最大值
                max = arr[i];
                //if完全可能不进去
                //return max;
            }
            //for循环也需要判断才能进入，所以理论上for循环完全可能不进去
            //return max;
        }
        return max;
    }//Missing return statement

    //比着葫芦画一个葫芦，求数组中元素的最小值
    public static int getArrayMinValue(int[] arr){
        //1,假设第一个元素最小
        int min = arr[0];
        //2，我说我最小，谁不服？开始遍历数组
        for (int i = 1; i < arr.length; i++) {
            //判断
            if (arr[i] < min){
                //你比我小，你取代我
                min = arr[i];
                //return
            }
            //return
        }
        return min;
    }


}
